1include <../std.scad>
  2
  3
  4module test_num_true() {
  5    assert_equal(num_true([0,false,undef]), 0);
  6    assert_equal(num_true([1,false,undef]), 1);
  7    assert_equal(num_true([1,5,false]), 2);
  8    assert_equal(num_true([1,5,true]), 3);
  9    assert_equal(num_true([[0,0], [0,0]]), 2);
 10    assert_equal(num_true([[0,0], [1,0]]), 2);
 11    assert_equal(num_true([[], [1,1]]), 1);
 12    assert_equal(num_true([1,3,5,7,9], function (a) a%2==0),0);
 13    assert_equal(num_true([1,3,6,8,9], function (a) a%2==0),2);
 14    assert_equal(num_true([1,3,5,7,9], function (a) a%2!=0),5);
 15}
 16test_num_true();
 17
 18
 19
 20module test_typeof() {
 21    assert(typeof(undef) == "undef");
 22    assert(typeof(true) == "boolean");
 23    assert(typeof(false) == "boolean");
 24    assert(typeof(-123) == "number");
 25    assert(typeof(0) == "number");
 26    assert(typeof(123) == "number");
 27    assert(typeof("") == "string");
 28    assert(typeof("foo") == "string");
 29    assert(typeof([]) == "list");
 30    assert(typeof(["foo","bar"]) == "list");
 31    assert(typeof([123,849,32]) == "list");
 32    assert(typeof([0:5]) == "range");
 33    assert(typeof([-3:0]) == "range");
 34    assert(typeof([0:1:5]) == "range");
 35    assert(typeof([-3:2:5]) == "range");
 36    assert(typeof([10:-2:-10]) == "range");
 37    assert(typeof([0:NAN:INF]) == "invalid");
 38    assert(typeof([0:"a":INF]) == "undef"); 
 39    assert(typeof([0:[]:INF]) == "undef"); 
 40    assert(typeof([true:1:INF]) == "undef"); 
 41}
 42test_typeof();
 43
 44
 45module test_is_type() {
 46    assert(is_type(undef,"undef"));
 47    assert(is_type(true,"boolean"));
 48    assert(is_type(false,"boolean"));
 49    assert(is_type(-123,"number"));
 50    assert(is_type(0,"number"));
 51    assert(is_type(123,"number"));
 52    assert(is_type("","string"));
 53    assert(is_type("foo","string"));
 54    assert(is_type([],"list"));
 55    assert(is_type([1,2,3],"list"));
 56    assert(is_type(["foo","bar"],"list"));
 57    assert(is_type([0:5],"range"));
 58
 59    assert(is_type(undef,["undef"]));
 60    assert(is_type(true,["boolean"]));
 61    assert(is_type(false,["boolean"]));
 62    assert(is_type(-123,["number"]));
 63    assert(is_type(0,["number"]));
 64    assert(is_type(123,["number"]));
 65    assert(is_type("",["string"]));
 66    assert(is_type("foo",["string"]));
 67    assert(is_type([],["list"]));
 68    assert(is_type([1,2,3],["list"]));
 69    assert(is_type(["foo","bar"],["list"]));
 70    assert(is_type([0:5],["range"]));
 71
 72    assert(is_type(123,["number","string"]));
 73    assert(is_type("foo",["number","string"]));
 74}
 75test_is_type();
 76
 77
 78module test_is_def() {
 79    assert(!is_def(undef));
 80    assert(is_def(true));
 81    assert(is_def(false));
 82    assert(is_def(-123));
 83    assert(is_def(0));
 84    assert(is_def(123));
 85    assert(is_def(""));
 86    assert(is_def("foo"));
 87    assert(is_def([]));
 88    assert(is_def([3,4,5]));
 89    assert(is_def(["foo","bar","baz"]));
 90    assert(is_def([0:5]));
 91}
 92test_is_def();
 93
 94
 95module test_segs() {
 96    assert_equal(segs(50,$fn=8), 8);
 97    assert_equal(segs(50,$fa=2,$fs=2), 158);
 98}
 99test_segs();
100
101
102
103
104module test_is_str() {
105    assert(!is_str(undef));
106    assert(!is_str(true));
107    assert(!is_str(false));
108    assert(!is_str(-123));
109    assert(!is_str(0));
110    assert(!is_str(123));
111    assert(is_str(""));
112    assert(is_str("foo"));
113    assert(!is_str([]));
114    assert(!is_str([3,4,5]));
115    assert(!is_str(["foo","bar","baz"]));
116    assert(!is_str([0:5]));
117}
118test_is_str();
119
120
121module test_is_int() {
122    assert(is_int(-999));
123    assert(is_int(-1));
124    assert(is_int(0));
125    assert(is_int(1));
126    assert(is_int(999));
127    assert(!is_int(-1.1));
128    assert(!is_int(1.1));
129    assert(!is_int(-0.1));
130    assert(!is_int(0.1));
131    assert(!is_int(-99.1));
132    assert(!is_int(99.1));
133    assert(!is_int(undef));
134    assert(!is_int(INF));
135    assert(!is_int(NAN));
136    assert(!is_int(false));
137    assert(!is_int(true));
138    assert(!is_int("foo"));
139    assert(!is_int([0,1,2]));
140    assert(!is_int([0:1:2]));
141}
142test_is_int();
143
144
145module test_is_integer() {
146    assert(is_integer(-999));
147    assert(is_integer(-1));
148    assert(is_integer(0));
149    assert(is_integer(1));
150    assert(is_integer(999));
151    assert(!is_integer(-1.1));
152    assert(!is_integer(1.1));
153    assert(!is_integer(-0.1));
154    assert(!is_integer(0.1));
155    assert(!is_integer(-99.1));
156    assert(!is_integer(99.1));
157    assert(!is_integer(undef));
158    assert(!is_integer(INF));
159    assert(!is_integer(NAN));
160    assert(!is_integer(false));
161    assert(!is_integer(true));
162    assert(!is_integer("foo"));
163    assert(!is_integer([0,1,2]));
164    assert(!is_integer([0:1:2]));
165}
166test_is_integer();
167
168
169module test_is_nan() {
170    assert(!is_nan(undef));
171    assert(!is_nan(true));
172    assert(!is_nan(false));
173    assert(!is_nan(-5));
174    assert(!is_nan(0));
175    assert(!is_nan(5));
176    assert(!is_nan(INF));
177    assert(!is_nan(-INF));
178    assert(!is_nan(""));
179    assert(!is_nan("foo"));
180    assert(!is_nan([]));
181    assert(!is_nan([3,4,5]));
182    assert(!is_nan([3:1:5]));
183    assert(is_nan(NAN));
184}
185test_is_nan();
186
187
188module test_is_finite() {
189    assert(!is_finite(undef));
190    assert(!is_finite(true));
191    assert(!is_finite(false));
192    assert(is_finite(-5));
193    assert(is_finite(0));
194    assert(is_finite(5));
195    assert(!is_finite(INF));
196    assert(!is_finite(-INF));
197    assert(!is_finite(""));
198    assert(!is_finite("foo"));
199    assert(!is_finite([]));
200    assert(!is_finite([3,4,5]));
201    assert(!is_finite([3:1:5]));
202    assert(!is_finite(NAN));
203}
204test_is_finite();
205
206
207module test_is_range() {
208    assert(!is_range(undef));
209    assert(!is_range(true));
210    assert(!is_range(false));
211    assert(!is_range(-5));
212    assert(!is_range(0));
213    assert(!is_range(5));
214    assert(!is_range(INF));
215    assert(!is_range(-INF));
216    assert(!is_range(""));
217    assert(!is_range("foo"));
218    assert(!is_range([]));
219    assert(!is_range([3,4,5]));
220    assert(!is_range([INF:4:5]));
221    assert(!is_range([3:NAN:5]));
222    assert(!is_range([3:4:"a"]));
223    assert(is_range([3:1:5]));
224}
225test_is_range();
226
227
228module test_valid_range() {
229    assert(valid_range([0:0]));
230    assert(valid_range([0:1:0]));
231    assert(valid_range([0:1:10]));
232    assert(valid_range([0.1:1.1:2.1]));
233    assert(valid_range([0:-1:0]));
234    assert(valid_range([10:-1:0]));
235    assert(valid_range([2.1:-1.1:0.1]));
236    if (version_num() < 20200600) {
237        assert(!valid_range([10:1:0]));
238        assert(!valid_range([2.1:1.1:0.1]));
239        assert(!valid_range([0:-1:10]));
240        assert(!valid_range([0.1:-1.1:2.1]));
241    }
242}
243test_valid_range();
244
245module test_is_consistent() {
246    assert(is_consistent([]));
247    assert(is_consistent([[],[]]));
248    assert(is_consistent([3,4,5]));
249    assert(is_consistent([[3,4],[4,5],[6,7]]));
250    assert(is_consistent([[[3],4],[[4],5]]));
251    assert(!is_consistent(5));
252    assert(!is_consistent(undef));
253    assert(!is_consistent([[3,4,5],[3,4]]));
254    assert(is_consistent([[3,[3,4,[5]]], [5,[2,9,[9]]]]));
255    assert(!is_consistent([[3,[3,4,[5]]], [5,[2,9,9]]]));
256
257    assert(is_consistent([3,4,5], 0));
258    assert(!is_consistent([3,4,undef], 0));
259    assert(is_consistent([[3,4],[4,5]], [1,1]));
260    assert(!is_consistent([[3,4], 6, [4,5]], [1,1]));
261    assert(is_consistent([[1,[3,4]], [4,[5,6]]], [1,[2,3]]));
262    assert(!is_consistent([[1,[3,INF]], [4,[5,6]]], [1,[2,3]]));
263}
264test_is_consistent();
265
266
267module test_same_shape() {
268    assert(same_shape([3,[4,5]],[7,[3,4]]));
269    assert(!same_shape([3,4,5], [7,[3,4]]));
270    assert(!same_shape([3,4,5],undef));
271    assert(!same_shape([5,3],3));
272    assert(!same_shape(undef,[3,4]));
273    assert(same_shape(4,5));
274    assert(!same_shape(5,undef));
275           
276}
277test_same_shape();
278
279
280module test_default() {
281    assert(default(undef,23) == 23);
282    assert(default(true,23) == true);
283    assert(default(false,23) == false);
284    assert(default(-123,23) == -123);
285    assert(default(0,23) == 0);
286    assert(default(123,23) == 123);
287    assert(default("",23) == "");
288    assert(default("foo",23) == "foo");
289}
290test_default();
291
292
293module test_first_defined() {
294    assert(first_defined([undef,undef,true,false,undef]) == true);
295    assert(first_defined([undef,undef,false,true,undef]) == false);
296    assert(first_defined([undef,undef,0,1,undef]) == 0);
297    assert(first_defined([undef,undef,43,44,undef]) == 43);
298    assert(first_defined([undef,undef,"foo","bar",undef]) == "foo");
299    assert(first_defined([0,1,2,3,4]) == 0);
300    assert(first_defined([2,3,4]) == 2);
301    assert(first_defined([[undef,undef],[undef,true],[false,undef]],recursive=true) == [undef, true]);
302}
303test_first_defined();
304
305
306module test_one_defined() {
307    assert_equal(one_defined([27,undef,undef], "length,L,l") ,27);
308    assert_equal(one_defined([undef,28,undef], "length,L,l") ,28);
309    assert_equal(one_defined([undef,undef,29], "length,L,l") ,29);
310    assert_equal(one_defined([undef,undef,undef], "length,L,l", dflt=undef), undef);
311    assert_equal(one_defined([27,undef,undef], ["length","L","l"]) ,27);
312    assert_equal(one_defined([undef,28,undef], ["length","L","l"]) ,28);
313    assert_equal(one_defined([undef,undef,29], ["length","L","l"]) ,29);
314    assert_equal(one_defined([undef,undef,undef], ["length","L","l"], dflt=undef), undef);
315}
316test_one_defined();
317
318
319module test_num_defined() {
320    assert(num_defined([undef,undef,true,false,undef]) == 2);
321    assert(num_defined([9,undef,true,false,undef]) == 3);
322    assert(num_defined([undef,9,true,false,undef]) == 3);
323    assert(num_defined(["foo",9,true,false,undef]) == 4);
324}
325test_num_defined();
326
327
328module test_any_defined() {
329    assert(!any_defined([undef,undef,undef,undef,undef]));
330    assert(any_defined([3,undef,undef,undef,undef]));
331    assert(any_defined([undef,3,undef,undef,undef]));
332    assert(any_defined([undef,undef,3,undef,undef]));
333    assert(any_defined([undef,undef,undef,3,undef]));
334    assert(any_defined([undef,undef,undef,undef,3]));
335    assert(any_defined([3,undef,undef,undef,3]));
336    assert(any_defined([3,3,3,3,3]));
337    assert(any_defined(["foo",undef,undef,undef,undef]));
338    assert(any_defined([undef,"foo",undef,undef,undef]));
339    assert(any_defined([undef,undef,"foo",undef,undef]));
340    assert(any_defined([undef,undef,undef,"foo",undef]));
341    assert(any_defined([undef,undef,undef,undef,"foo"]));
342    assert(any_defined(["foo",undef,undef,undef,"foo"]));
343    assert(any_defined(["foo","foo","foo","foo","foo"]));
344    assert(any_defined([undef,undef,true,false,undef]));
345}
346test_any_defined();
347
348
349module test_all_defined() {
350    assert(!all_defined([undef,undef,undef,undef,undef]));
351    assert(!all_defined([3,undef,undef,undef,undef]));
352    assert(!all_defined([undef,3,undef,undef,undef]));
353    assert(!all_defined([undef,undef,3,undef,undef]));
354    assert(!all_defined([undef,undef,undef,3,undef]));
355    assert(!all_defined([undef,undef,undef,undef,3]));
356    assert(!all_defined([3,undef,undef,undef,3]));
357    assert(all_defined([3,3,3,3,3]));
358    assert(!all_defined(["foo",undef,undef,undef,undef]));
359    assert(!all_defined([undef,"foo",undef,undef,undef]));
360    assert(!all_defined([undef,undef,"foo",undef,undef]));
361    assert(!all_defined([undef,undef,undef,"foo",undef]));
362    assert(!all_defined([undef,undef,undef,undef,"foo"]));
363    assert(!all_defined(["foo",undef,undef,undef,"foo"]));
364    assert(all_defined(["foo","foo","foo","foo","foo"]));
365    assert(!all_defined([undef,undef,true,false,undef]));
366}
367test_all_defined();
368
369
370module test_get_anchor() {
371    assert_equal(get_anchor(UP,true,-[1,1,1],BOT),CENTER);
372    assert_equal(get_anchor(UP,false,-[1,1,1],BOT),-[1,1,1]);
373    assert_equal(get_anchor(UP,undef,-[1,1,1],BOT),UP);
374    assert_equal(get_anchor(undef,true,-[1,1,1],BOT),CENTER);
375    assert_equal(get_anchor(undef,false,-[1,1,1],BOT),-[1,1,1]);
376    assert_equal(get_anchor(undef,undef,-[1,1,1],BOT),BOT);
377}
378test_get_anchor();
379
380
381module test_get_radius() {
382    assert(get_radius(r1=100,d1=undef,r=undef,d=undef,dflt=23) == 100);
383    assert(get_radius(r1=undef,d1=200,r=undef,d=undef,dflt=23) == 100);
384    assert(get_radius(r1=undef,d1=undef,r=100,d=undef,dflt=23) == 100);
385    assert(get_radius(r1=undef,d1=undef,r=undef,d=200,dflt=23) == 100);
386    assert(get_radius(r1=50,d1=undef,r=undef,d=undef,dflt=23) == 50);
387    assert(get_radius(r1=undef,d1=100,r=undef,d=undef,dflt=23) == 50);
388    assert(get_radius(r1=undef,d1=undef,r=50,d=undef,dflt=23) == 50);
389    assert(get_radius(r1=undef,d1=undef,r=undef,d=100,dflt=23) == 50);
390    assert(get_radius(r1=undef,d1=undef,r=undef,d=undef,dflt=23) == 23);
391    assert(get_radius(r1=undef,d1=undef,r=undef,d=undef,dflt=undef) == undef);
392}
393test_get_radius();
394
395
396module test_scalar_vec3() {
397    assert(scalar_vec3(undef) == undef);
398    assert(scalar_vec3(3) == [3,3,3]);
399    assert(scalar_vec3(3,dflt=1) == [3,1,1]);
400    assert(scalar_vec3([3]) == [3,0,0]);
401    assert(scalar_vec3([3,4]) == [3,4,0]);
402    assert(scalar_vec3([3,4],dflt=1) == [3,4,1]);
403    assert(scalar_vec3([3,"a"],dflt=1) == [3,"a",1]);
404    assert(scalar_vec3([3,[2]],dflt=1) == [3,[2],1]);
405    assert(scalar_vec3([3],dflt=1) == [3,1,1]);
406    assert(scalar_vec3([3,4,5]) == [3,4,5]);
407    assert(scalar_vec3([3,4,5,6]) == [3,4,5]);
408    assert(scalar_vec3([3,4,5,6]) == [3,4,5]);
409}
410test_scalar_vec3();
411
412
413module test_segs() {
414    assert_equal(segs(50,$fn=8), 8);
415    assert_equal(segs(50,$fa=2,$fs=2), 158);
416    assert(segs(1)==5);
417    assert(segs(11)==30);
418  //  assert(segs(1/0)==5);
419  //  assert(segs(0/0)==5);
420  //  assert(segs(undef)==5);
421}
422test_segs();
423
424// vim: expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap